#!/usr/bin/python
# encoding: utf-8
import re
from django.conf import settings
from django.contrib.gis.db import models
from django.contrib.gis.geos import Point

from incidencias import Carretera

PUERTO_INCIDENT_CHOICES = (
    (0, u"Ok"),
    (1, u"Alerta"),
    (2, u"Cadena"),
    (3, u"Cerrado"),
)

class CAPVPuertoCapture(models.Model):
    finished = models.BooleanField(default=False)
    datetime = models.DateTimeField(auto_now=True)
    
    class Meta:
        app_label = 'mobile'
        
    @staticmethod
    def get_last_capture():
        return CAPVPuertoCapture.objects.filter(finished=True).order_by('-datetime')[:1][0]
    
    def __unicode__(self):
        return u"CAPVPuertoCapture"

class Provincia(models.Model):
    name = models.CharField(blank=False, max_length=100)
    
    class Meta:
        app_label = 'mobile'
        
    def __unicode__(self):
        return self.name

class CAPVPuerto(models.Model):
    point = models.PointField(blank=True, null=True)
    name = models.CharField(blank=False, max_length=100)
    label = models.CharField(blank=False, max_length=100)
    red = models.CharField(blank=False, max_length=100)
    provincia = models.ForeignKey(Provincia)
    carretera = models.ForeignKey(Carretera)
    
    objects = models.GeoManager()
    
    class Meta:
        app_label = 'mobile'
        
    def __unicode__(self):
        return self.name
    
class CAPVPuertoIncident(models.Model):
    situacion = models.CharField(blank=False, max_length=100)
    estado_turismos = models.IntegerField(blank=False, null=False, choices=PUERTO_INCIDENT_CHOICES)
    estado_articulados = models.IntegerField(blank=False, null=False, choices=PUERTO_INCIDENT_CHOICES)
    estado_camiones = models.IntegerField(blank=False, null=False, choices=PUERTO_INCIDENT_CHOICES)
    vialidad = models.BooleanField(default=True)
    
    capture = models.ForeignKey(CAPVPuertoCapture)
    puerto = models.ForeignKey(CAPVPuerto)
    
    class Meta:
        app_label = 'mobile'
    
    def discover_estado(self, estado):
        if re.match(r'.*ic\.gif.*',estado):
            return PUERTO_INCIDENT_CHOICES[3][0]
        elif re.match(r'.*ip\.gif.*',estado):
            return PUERTO_INCIDENT_CHOICES[1][0]
        elif re.match(r'.*icad\.gif.*',estado):
            return PUERTO_INCIDENT_CHOICES[2][0]
        else:
            return PUERTO_INCIDENT_CHOICES[0][0]
        
    def set_data(self, idioma,latitud,longitud,fecha_formteada,nombre,provincia,red,carretera,situacion,fuente,estado_turismos,estado_articulados,estado_camiones,estado, vialidad):
        #Puerto
        point = Point(float(latitud), float(longitud))
        try:
            puerto = CAPVPuerto.objects.get(name=nombre)
        except:
            provincia, created = Provincia.objects.get_or_create(name=provincia)
            carretera, created = Carretera.objects.get_or_create(name=carretera)
            
            puerto = CAPVPuerto(point = point, name=nombre, red=red, provincia=provincia, carretera=carretera)
            puerto.save()
        
        if puerto.point == None:
            puerto.point = "POINT (%s %s)" % (latitud, longitud)
            puerto.save()
            
        self.puerto = puerto
        self.estado_turismos = self.discover_estado(estado_turismos)
        self.estado_articulados = self.discover_estado(estado_articulados)
        self.estado_camiones = self.discover_estado(estado_camiones)
        self.situacion = situacion
        self.vialidad = vialidad
        
    def __unicode__(self):
        return u"Incidente en %s" % self.puerto